package com.uniflow.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.uniflow.entity.ApiApplication;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * API应用Mapper接口
 * 
 * @author uniflow
 * @since 1.0.0
 */
@Mapper
public interface ApiApplicationMapper extends BaseMapper<ApiApplication> {
    
    /**
     * 分页查询API应用
     */
    IPage<ApiApplication> selectApplicationPage(Page<ApiApplication> page,
                                               @Param("appName") String appName,
                                               @Param("status") Integer status,
                                               @Param("contactEmail") String contactEmail,
                                               @Param("keyword") String keyword);
    
    /**
     * 根据应用名称查询
     */
    ApiApplication selectByAppName(@Param("appName") String appName);
    
    /**
     * 检查应用名称是否存在
     */
    boolean existsByAppName(@Param("appName") String appName, @Param("excludeId") String excludeId);
    
    /**
     * 查询启用的应用列表
     */
    List<ApiApplication> selectEnabledApplications();
    
    /**
     * 查询应用统计信息
     */
    ApiApplication.ApiApplicationStats selectApplicationStats(@Param("appId") String appId);
    
    /**
     * 批量更新状态
     */
    int batchUpdateStatus(@Param("ids") List<String> ids, @Param("status") Integer status);
    
    /**
     * 查询应用调用统计
     */
    List<Map<String, Object>> selectCallStatistics(@Param("appId") String appId,
                                                   @Param("startDate") String startDate,
                                                   @Param("endDate") String endDate);
    
    /**
     * 查询热门应用
     */
    List<ApiApplication> selectPopularApplications(@Param("limit") Integer limit);
    
    /**
     * 查询应用总数
     */
    Long selectTotalCount();
    
    /**
     * 查询启用应用数
     */
    Long selectEnabledCount();
    
    /**
     * 查询今日新增应用数
     */
    Long selectTodayNewCount();
    
    /**
     * 查询应用分布统计
     */
    List<Map<String, Object>> selectDistributionStats();
    
    /**
     * 查询应用使用趋势
     */
    List<Map<String, Object>> selectUsageTrend(@Param("days") Integer days);
    
    /**
     * 查询应用错误率统计
     */
    List<Map<String, Object>> selectErrorRateStats();
    
    /**
     * 查询应用性能统计
     */
    List<Map<String, Object>> selectPerformanceStats();
    
    /**
     * 查询应用详情（包含密钥信息）
     */
    ApiApplication selectWithKeys(@Param("id") String id);
    
    /**
     * 查询最近活跃的应用
     */
    List<ApiApplication> selectRecentActiveApplications(@Param("limit") Integer limit);
    
    /**
     * 查询长时间未使用的应用
     */
    List<ApiApplication> selectInactiveApplications(@Param("days") Integer days);
    
    /**
     * 查询高频调用应用
     */
    List<ApiApplication> selectHighFrequencyApplications(@Param("limit") Integer limit);
    
    /**
     * 查询应用IP访问统计
     */
    List<Map<String, Object>> selectIpAccessStats(@Param("appId") String appId);
    
    /**
     * 查询应用API调用分布
     */
    List<Map<String, Object>> selectApiCallDistribution(@Param("appId") String appId);
    
    /**
     * 查询应用时段访问统计
     */
    List<Map<String, Object>> selectHourlyAccessStats(@Param("appId") String appId);
    
    /**
     * 查询应用月度统计
     */
    List<Map<String, Object>> selectMonthlyStats(@Param("appId") String appId, @Param("months") Integer months);
}